package listnode;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;

public class _817_链表组件 {


    /**
     * 给定链表头结点 head，该链表上的每个结点都有一个 唯一的整型值 。
     *
     * 同时给定列表 G，该列表是上述链表中整型值的一个子集。
     *
     * 返回列表 G 中组件的个数，这里对组件的定义为：链表中一段最长连续结点的值（该值必须在列表 G 中）构成的集合。
     *
     *
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/linked-list-components
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     * @param head
     * @param G
     * @return
     */
    public static int numComponents(ListNode head, int[] G) {
        Set<Integer> gSet = new HashSet<>();

        for (int j : G) {
            gSet.add(j);
        }

        int r = 0;
        ListNode cur = head;
        while (cur != null) {
            if(gSet.contains(cur.val) && (cur.next == null || !gSet.contains(cur.next.val))){
                r++;
            }
            cur = cur.next;
        }
        return r;
    }
}
